package books.ci_shi_dai

fun main(args: Array<String>) {


    //位运算
    bit()

    //元组
    tuple()

    //区间
//    range()

    //字符串
    stringAndChar()


}

private fun stringAndChar() {
    val message = "我是一段&字符&串abc"

    message.count()
    message.length
    message.get(3)
    message[3]
    message.elementAt(3)
    message.first()
    message.last()
    message.substring(3)
    println(message.indices)//range
    println(message.contentEquals("我是一段&字符&串abc"))
    message.drop(1)
    println(message.dropLast(3))
    println(message.dropWhile { it != '&' }) //丢弃第一个&之前的字符,不包括&
    message.take(2)
    message.takeLast(2)
    println(message.replace("&", "补充"))

    val five = '5'
    val me = '我'
    five.isDigit()
    me.isLetter()
    println(five - 1)//神奇等于4
    println(me + 1)
}

private fun range() {
    val 一到一百 = 1..100 //全闭区间,含起始和终点
    val d = 99
    val 测试d在区间内吗 = d in 一到一百

    val 十倒数 = 10.downTo(0) //全闭区间,含起始和终点,注意，不能用负数创建个递减的区间
    val 一百到两百 = 100.rangeTo(200) // rangeTo 的运算符是 ..
    val 一到九 = 1 until 10 //不包含终点

    val 倒数步进2 = 10.downTo(0).step(2)

    val 倒数变正序 = 十倒数.reversed()

    loop(倒数步进2)


}

private fun loop(倒数步进2: IntProgression) {
    //对象想要被 for 循环使用，需要实现iterator的函数
    for (value in 倒数步进2) {
        println(value)
    }

    //数组和集合可以带索引的遍历
    for (index in arrayOf(10, 20).indices) {
        //todo
    }
}

private fun tuple() {
    val triple = Triple("你好", 1, 0.5)
    val pair = Pair("叫我爸爸", true)
    println("${triple.first}---${triple.second}----${triple.third}")
    println("${pair.first}----${pair.second}")
}

private fun bit() {
    val a = 1 shl 2 //左移两位
    val b = 1 shr 2 // 右移两位
    val c = 1 ushr 2 //无符号右移两位
    val d = 1 and 2 //与
    val f = 1 or 2 //或
    val e = 1 xor 2 //异或
    val g = 1.inv() //取反,不是中缀表达式

    println("$a---$b--$c---$d--$f---$e---$g")
}